package pe.gob.sedapal.scmultimedia.rcp.view.estadocuenta;

import java.util.ArrayList;

import oracle.jdbc.Const;

import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseTrackAdapter;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IViewReference;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.ViewPart;

import pe.gob.sedapal.scmultimedia.config.ApplicationContext;
import pe.gob.sedapal.scmultimedia.domain.Deuda;
import pe.gob.sedapal.scmultimedia.domain.Suministro;
import pe.gob.sedapal.scmultimedia.service.EstadoCuentaService;
import pe.gob.sedapal.scmultimedia.service.LogEstadisticoService;
import pe.gob.sedapal.scmultimedia.sessionbean.DataSessionBean;
import pe.gob.sedapal.scmultimedia.util.Constante;
import pe.gob.sedapal.scmultimedia.util.DateUtil;
import pe.gob.sedapal.scmultimedia.util.ImprimirUtil;
import pe.gob.sedapal.scmultimedia.util.Messages;

import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.SWT;
import org.eclipse.wb.swt.ResourceManager;
import org.eclipse.wb.swt.SWTResourceManager;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.swt.widgets.Text;

public class ResultadoView extends ViewPart {
	
	private EstadoCuentaService estadoCuentaService;
	private LogEstadisticoService logEstadisticoService;
	private DataSessionBean dataSessionBean;
	
	private Suministro suministro;
	private ArrayList<Deuda> deudas; 
	
	public static final String ID = Constante.ID_RESULTADO_VIEW;
	//public static final String ID = "scmultimedia.consultaEstadoCuentaView.ResultadoView";
	
	private Table table;
	
	private Double totalCliente;
	private Text txtFieldNis;
	private Text txtFieldTitular;
	private Text txtFieldDirSuministro;
	private Text txtFieldTotalCuenta;
	
	public ResultadoView() {
		totalCliente = (double) 0;		
		
		estadoCuentaService = (EstadoCuentaService)ApplicationContext.getBean(EstadoCuentaService.class);
		logEstadisticoService = (LogEstadisticoService)ApplicationContext.getBean(LogEstadisticoService.class);
		dataSessionBean = (DataSessionBean)ApplicationContext.getBean(DataSessionBean.class);
		suministro = estadoCuentaService.obtenerSuministro(dataSessionBean.getSuministro().getNis());
		
		logEstadisticoService.ActualizarDatos("scmultimedia", 2111L, Constante.ACCION_SALDO);
	}

	@Override
	public void createPartControl(final Composite parent) {
		if(!validarSuministro(parent)){
			return;
		}
		parent.setBackgroundImage(ResourceManager.getPluginImage("scmultimedia", Constante.RUTA_IMG_FONDO_SEDAPAL));
		parent.setBackgroundMode(SWT.INHERIT_DEFAULT);
		parent.setLayout(null);
		
		Label lblNis = new Label(parent, SWT.NONE);
		lblNis.setForeground(SWTResourceManager.getColor(Constante.VALOR_FUENTE_RED,Constante.VALOR_FUENTE_GREEN, Constante.VALOR_FUENTE_BLUE));
		lblNis.setBounds(10, 87, 143, 27);
		lblNis.setFont(SWTResourceManager.getFont("Ubuntu", 13, SWT.BOLD));
		lblNis.setText(Messages.resultado_etiqueta_numeroSuministro);
		
		Label lblDirSuministro = new Label(parent, SWT.NONE);
		lblDirSuministro.setForeground(SWTResourceManager.getColor(Constante.VALOR_FUENTE_RED,Constante.VALOR_FUENTE_GREEN, Constante.VALOR_FUENTE_BLUE));
		lblDirSuministro.setBounds(10, 149, 143, 27);
		lblDirSuministro.setFont(SWTResourceManager.getFont("Ubuntu", 13, SWT.BOLD));
		lblDirSuministro.setText(Messages.resultado_etiqueta_direccion);
		
		Label lblTitular1 = new Label(parent, SWT.NONE);
		lblTitular1.setForeground(SWTResourceManager.getColor(Constante.VALOR_FUENTE_RED,Constante.VALOR_FUENTE_GREEN, Constante.VALOR_FUENTE_BLUE));
		lblTitular1.setBounds(10, 118, 84, 27);
		lblTitular1.setFont(SWTResourceManager.getFont("Ubuntu", 13, SWT.BOLD));
		lblTitular1.setText(Messages.resultado_etiqueta_titular);
		
//		Label lblLocalidad = new Label(parent, SWT.NONE);
//		lblLocalidad.setForeground(SWTResourceManager.getColor(Constante.VALOR_FUENTE_RED,Constante.VALOR_FUENTE_GREEN, Constante.VALOR_FUENTE_BLUE));
//		lblLocalidad.setFont(SWTResourceManager.getFont("Ubuntu", 12, SWT.BOLD));
//		lblLocalidad.setBounds(10, 166, 143, 17);
//		lblLocalidad.setText("Localidad:");
//		
//		Label txtLocalidad = new Label(parent, SWT.NONE);
//		txtLocalidad.setForeground(SWTResourceManager.getColor(0, 0, 0));
//		txtLocalidad.setBounds(181, 166, 211, 17);
//		txtLocalidad.setText("localidad");
		
//		Label lblDistrito = new Label(parent, SWT.NONE);
//		lblDistrito.setForeground(SWTResourceManager.getColor(Constante.VALOR_FUENTE_RED,Constante.VALOR_FUENTE_GREEN, Constante.VALOR_FUENTE_BLUE));
//		lblDistrito.setFont(SWTResourceManager.getFont("Ubuntu", 12, SWT.BOLD));
//		lblDistrito.setBounds(400, 166, 70, 17);
//		lblDistrito.setText("Distrito:");
//		
//		Label txtDistrito = new Label(parent, SWT.NONE);
//		txtDistrito.setForeground(SWTResourceManager.getColor(0, 0, 0));
//		txtDistrito.setBounds(484, 166, 266, 17);
//		txtDistrito.setText("distrito");
		
		Label lblResumenDeEstado = new Label(parent, SWT.NONE);
		lblResumenDeEstado.setForeground(SWTResourceManager.getColor(51, 102, 153));
		lblResumenDeEstado.setFont(SWTResourceManager.getFont("FreeSans", 17, SWT.BOLD | SWT.ITALIC));
		lblResumenDeEstado.setBounds(10, 21, 429, 38);
		lblResumenDeEstado.setText(Messages.resultado_titulo);
		
		Label imgLogo = new Label(parent, SWT.NONE);
		imgLogo.setImage(ResourceManager.getPluginImage("scmultimedia", Constante.RUTA_IMG_LOGO_SEDAPAL_INTERNO));
		imgLogo.setBounds(635, 10, 192, 84);
		
		Label imgBarralbl = new Label(parent, SWT.NONE);
		imgBarralbl.setImage(ResourceManager.getPluginImage("scmultimedia", Constante.RUTA_IMG_BARRA));
		imgBarralbl.setBounds(10, 61, 736, 8);
		
		Composite compositeDeudas = new Composite(parent, SWT.NONE);
		compositeDeudas.setBounds(10, 206, 740, 235);
		compositeDeudas.setLayout(null);
		
		
		
		Label lblListaDeFacturas = new Label(compositeDeudas, SWT.NONE);
		lblListaDeFacturas.setFont(SWTResourceManager.getFont("Ubuntu", 13, SWT.BOLD));
		lblListaDeFacturas.setForeground(SWTResourceManager.getColor(Constante.VALOR_FUENTE_RED,Constante.VALOR_FUENTE_GREEN, Constante.VALOR_FUENTE_BLUE));
		lblListaDeFacturas.setAlignment(SWT.CENTER);
		lblListaDeFacturas.setBounds(10, 5, 708, 28);
		lblListaDeFacturas.setText(Messages.resultado_tabla_listaFacturas);
		
		TableViewer viewer = new TableViewer(compositeDeudas);
		
		viewer.setContentProvider(ArrayContentProvider.getInstance());
		
				table = viewer.getTable();
				table.setFont(SWTResourceManager.getFont("Ubuntu", 12, SWT.NORMAL));
				table.setSize(740, 143);
				table.setLocation(0, 39);
				viewer.getTable().setHeaderVisible(true);
				viewer.getTable().setLinesVisible(true);
				
				TableViewerColumn viewerColumnFactura = new TableViewerColumn(viewer, SWT.NONE);
				TableColumn columnaFactura = viewerColumnFactura.getColumn();
				columnaFactura.setAlignment(SWT.CENTER);
				columnaFactura.setWidth(172);
				columnaFactura.setText("Factura");
				viewerColumnFactura.setLabelProvider(new ColumnLabelProvider(){
					@Override
					public String getText(Object element) {
						Deuda deuda = (Deuda) element;
						return deuda.getFactura();
					}			
				});
				
				TableViewerColumn viewerColumnFVencimiento = new TableViewerColumn(viewer, SWT.NONE);
				TableColumn columnaFVencimiento = viewerColumnFVencimiento.getColumn();
				columnaFVencimiento.setAlignment(SWT.CENTER);
				columnaFVencimiento.setWidth(110);
				columnaFVencimiento.setText("Fec. vcto.");
				viewerColumnFVencimiento.setLabelProvider(new ColumnLabelProvider(){
					@Override
					public String getText(Object element) {
						Deuda deuda = (Deuda) element;
						return DateUtil.dateToString(deuda.getfVcto(), DateUtil.FORMATO_DD_MM_YYYY);
					}			
				});
				
				TableViewerColumn viewerColumnMtoFacturado = new TableViewerColumn(viewer, SWT.NONE);
				TableColumn columnaMtoFacturado = viewerColumnMtoFacturado.getColumn();
				columnaMtoFacturado.setAlignment(SWT.CENTER);
				columnaMtoFacturado.setWidth(117);
				columnaMtoFacturado.setText("Mto Facturado");
				viewerColumnMtoFacturado.setLabelProvider(new ColumnLabelProvider(){
					@Override
					public String getText(Object element) {
						Deuda deuda = (Deuda) element;			
						return deuda.getImpFacturado().toString();
					}			
				});		
				
				TableViewerColumn viewerColumnACuenta = new TableViewerColumn(viewer, SWT.NONE);
				TableColumn columnaACuenta = viewerColumnACuenta.getColumn();
				columnaACuenta.setAlignment(SWT.CENTER);
				columnaACuenta.setWidth(88);
				columnaACuenta.setText("A Cuenta");
				viewerColumnACuenta.setLabelProvider(new ColumnLabelProvider(){
					@Override
					public String getText(Object element) {
						Deuda deuda = (Deuda) element;			
						return deuda.getImpActa().toString();
					}			
				});			
				
				TableViewerColumn viewerColumnTipoFactura = new TableViewerColumn(viewer, SWT.NONE);
				TableColumn columnaTipoFactura = viewerColumnTipoFactura.getColumn();
				columnaTipoFactura.setAlignment(SWT.CENTER);
				columnaTipoFactura.setWidth(132);
				columnaTipoFactura.setText("Tipo de factura");
				viewerColumnTipoFactura.setLabelProvider(new ColumnLabelProvider(){
					@Override
					public String getText(Object element) {
						Deuda deuda = (Deuda) element;
						return deuda.getTipoFact();
					}			
				});
				
				TableViewerColumn viewerColumnDeuda = new TableViewerColumn(viewer, SWT.NONE);
				TableColumn columnaDeuda = viewerColumnDeuda.getColumn();
				columnaDeuda.setAlignment(SWT.CENTER);
				columnaDeuda.setWidth(118);
				columnaDeuda.setText("Deuda");
				viewerColumnDeuda.setLabelProvider(new ColumnLabelProvider(){
					@Override
					public String getText(Object element) {
						Deuda deuda = (Deuda) element;			
						return deuda.getImpDeuda().toString();
					}			
				});
				
				Label lblTotalAdeudadoEn = new Label(compositeDeudas, SWT.NONE);
				lblTotalAdeudadoEn.setForeground(SWTResourceManager.getColor(Constante.VALOR_FUENTE_RED,Constante.VALOR_FUENTE_GREEN, Constante.VALOR_FUENTE_BLUE));
				lblTotalAdeudadoEn.setFont(SWTResourceManager.getFont("Ubuntu", 13, SWT.BOLD));
				lblTotalAdeudadoEn.setBounds(346, 188, 245, 27);
				lblTotalAdeudadoEn.setText(Messages.resultado_tabla_totalAdeudado);
				
				txtFieldTotalCuenta = new Text(compositeDeudas, SWT.BORDER | SWT.READ_ONLY | SWT.RIGHT);
				txtFieldTotalCuenta.setFont(SWTResourceManager.getFont("Ubuntu", 12, SWT.NORMAL));
				txtFieldTotalCuenta.setBounds(597, 188, 133, 27);
				txtFieldTotalCuenta.setText("S/. "+totalCliente);
				
				final Label lblRegresar = new Label(parent, SWT.NONE);
				lblRegresar.addMouseTrackListener(new MouseTrackAdapter() {
					@Override
					public void mouseEnter(MouseEvent e) {
						lblRegresar.setImage(ResourceManager.getPluginImage("scmultimedia", Constante.RUTA_BOTON_REGRESAR_OFF));
					}
					@Override
					public void mouseExit(MouseEvent e) {
						lblRegresar.setImage(ResourceManager.getPluginImage("scmultimedia", Constante.RUTA_BOTON_REGRESAR_ON));
					}
				});
				lblRegresar.addMouseListener(new MouseAdapter() {
					@Override
					public void mouseDown(MouseEvent e) {
						if(dataSessionBean.getNumero().getNif() == null){
							//volver a BuscarSuministroView
							regresarVistaPrevia(BuscarSuministroView.ID);
						}else{
							//volver a SuministroPorNumeroView
							regresarVistaPrevia(SuministrosPorNumeroView.ID);
						}
					}
				});
				lblRegresar.setImage(ResourceManager.getPluginImage("scmultimedia", Constante.RUTA_BOTON_REGRESAR_OFF));
				lblRegresar.setAlignment(SWT.CENTER);
				lblRegresar.setBounds(572, 447, 186, 56);
				
				final Label imgImprimir = new Label(parent, SWT.NONE);
				imgImprimir.addMouseListener(new MouseAdapter() {
					@Override
					public void mouseDown(MouseEvent e) {
						new ImprimirUtil(suministro, deudas);
					}
				});
				imgImprimir.setBounds(371, 445, 195, 58);
				
				imgImprimir.addMouseTrackListener(new MouseTrackAdapter() {
					@Override
					public void mouseEnter(MouseEvent e) {
						imgImprimir.setImage(org.eclipse.wb.swt.ResourceManager.getPluginImage("scmultimedia", Constante.RUTA_BOTON_IMPRIMIR_OFF));
					}
					@Override
					public void mouseExit(MouseEvent e) {
						imgImprimir.setImage(org.eclipse.wb.swt.ResourceManager.getPluginImage("scmultimedia", Constante.RUTA_BOTON_IMPRIMIR_ON));
					}
				});
				imgImprimir.setAlignment(SWT.CENTER);
				imgImprimir.setImage(org.eclipse.wb.swt.ResourceManager.getPluginImage("scmultimedia", Constante.RUTA_BOTON_IMPRIMIR_OFF));
				
				txtFieldNis = new Text(parent, SWT.BORDER);
				txtFieldNis.setEditable(false);
				txtFieldNis.setFont(SWTResourceManager.getFont("Ubuntu", 12, SWT.NORMAL));
				txtFieldNis.setBounds(159, 87, 209, 27);
				txtFieldNis.setText(suministro.getNis().toString());
				
				txtFieldTitular = new Text(parent, SWT.BORDER);
				txtFieldTitular.setEditable(false);
				txtFieldTitular.setFont(SWTResourceManager.getFont("Ubuntu", 12, SWT.NORMAL));
				txtFieldTitular.setBounds(159, 118, 355, 27);
				txtFieldTitular.setText(suministro.getApNombres());
				
				txtFieldDirSuministro = new Text(parent, SWT.BORDER);
				txtFieldDirSuministro.setEditable(false);
				txtFieldDirSuministro.setFont(SWTResourceManager.getFont("Ubuntu", 12, SWT.NORMAL));
				txtFieldDirSuministro.setBounds(159, 149, 470, 27);
				txtFieldDirSuministro.setText(suministro.getDireccion());
				
				
		
		viewer.setInput(deudas);
	}
	
	public void regresarVistaPrevia(String destino){
		IWorkbenchPage pagina = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
		IViewReference vistaActual = pagina.findViewReference(ResultadoView.ID);
		
		pagina.hideView(vistaActual);
		
		try{
			pagina.showView(destino);
		}catch(Exception ex){
			ex.printStackTrace();
		}							
	}
	
	public boolean validarSuministro(final Composite parent){
		if(suministro!=null){
			deudas = (ArrayList<Deuda>) estadoCuentaService.listarDeudasPorSuministro(suministro.getNis());
			
			for (Deuda deuda : deudas) {
				totalCliente+=deuda.getImpDeuda();
			}
			return true;
		}else{
			parent.setLayout(null);
			
			Label lblNis = new Label(parent, SWT.NONE);
			lblNis.setBounds(200, 210, 400, 17);
			lblNis.setFont(SWTResourceManager.getFont("Ubuntu", 11, SWT.BOLD));
			lblNis.setText("El "+dataSessionBean.getSuministro().getNis()+" no es un número de Suministro registrado.");
			
			final Label btnRetornar = new Label(parent, SWT.CENTER);
			btnRetornar.addMouseListener(new MouseAdapter() {
				@Override
				public void mouseDown(MouseEvent e) {
					IWorkbenchPage pagina = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
					IViewReference vistaActual = pagina.findViewReference(ResultadoView.ID);
					
					try{
						pagina.showView(BuscarSuministroView.ID);					
						
						
					}catch(Exception ex){
						ex.printStackTrace();
					}
					
					pagina.hideView(vistaActual);						
				}
			});
			
			btnRetornar.addMouseTrackListener(new MouseTrackAdapter() {
				@Override
				public void mouseEnter(MouseEvent e) {
					btnRetornar.setBackground(SWTResourceManager.getColor(40, 70, 100));
				}
				@Override
				public void mouseExit(MouseEvent e) {
					btnRetornar.setBackground(SWTResourceManager.getColor(102, 153, 153));
				}
			});
			btnRetornar.setBackground(SWTResourceManager.getColor(102, 153, 153));
			btnRetornar.setBounds(482, 240, 189, 29);
			btnRetornar.setText("Retornar");
		}
		return false;
	}
	
	
	@Override
	public void setFocus() {
		// TODO Auto-generated method stub

	}
}
